﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace Processing.Structures
{
    /// <summary>
    /// Modelliert einen OpenCL Int8
    /// </summary>
    [Serializable]
    [StructLayout(LayoutKind.Sequential)]
    public struct Int8
    {
        #region Attribute
        /// <summary>
        /// Gibt und setzt den Wert von s0.
        /// </summary>
        public int s0;

        /// <summary>
        /// Gibt und setzt den Wert von s1.
        /// </summary>
        public int s1;

        /// <summary>
        /// Gibt und setzt den Wert von s2.
        /// </summary>
        public int s2;

        /// <summary>
        /// Gibt und setzt den Wert von s3.
        /// </summary>
        public int s3;

        /// <summary>
        /// Gibt und setzt den Wert von s4.
        /// </summary>
        public int s4;

        /// <summary>
        /// Gibt und setzt den Wert von s5.
        /// </summary>
        public int s5;

        /// <summary>
        /// Gibt und setzt den Wert von s6.
        /// </summary>
        public int s6;

        /// <summary>
        /// Gibt und setzt den Wert von s7.
        /// </summary>
        public int s7;
        #endregion Attribute

        #region Methoden
        /// <summary>
        /// Initialisiert die Struktur mit Werten.
        /// </summary>
        /// <param name="s0">Der Wert für s0.</param>
        /// <param name="s1">Der Wert für s1.</param>
        /// <param name="s2">Der Wert für s2.</param>
        /// <param name="s3">Der Wert für s3.</param>
        /// <param name="s4">Der Wert für s4.</param>
        /// <param name="s5">Der Wert für s5.</param>
        /// <param name="s6">Der Wert für s6.</param>
        /// <param name="s7">Der Wert für s7.</param>
        public Int8(int s0, int s1, int s2, int s3, int s4, int s5, int s6, int s7)
        {
            this.s0 = s0;
            this.s1 = s1;
            this.s2 = s2;
            this.s3 = s3;
            this.s4 = s4;
            this.s5 = s5;
            this.s6 = s6;
            this.s7 = s7;
        }

        /// <summary>
        /// Gibt eine Zeichenkettenrepräsentation der Struktur zurück.
        /// </summary>
        /// <returns>Die Zeichenkette.</returns>
        public override string ToString()
        {
            return "s0: " + s0.ToString() +
                   " s1: " + s1.ToString() +
                   " s2: " + s2.ToString() +
                   " s3: " + s3.ToString() +
                   " s4: " + s4.ToString() +
                   " s5: " + s5.ToString() +
                   " s6: " + s6.ToString() +
                   " s7: " + s7.ToString();
        }
        #endregion Methoden
    }
}
